package task1;

import java.io.File;
import java.io.Reader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.apache.log4j.Logger;

public class CreateXMLTemplate {
	
	private static final Logger logger = Logger.getLogger(LoadXMLTemplate.class);
	
	private int c;
	private String str = null,
				   inputFile,
				   outputFile;
	private Reader r;
	private StringBuffer sb;
	private File file;
	private JAXBContext jaxbContext;
	private Marshaller jaxbMarshaller;
	private XMLTemplate xmlTemplate;
	
	/*
	 * Предназначен для чтения текстового файла inputFile
	 * и записи его содержимого в xml файл outputFile
	 * 
	 * inputFile = "digits_template.txt"
	 * outputFile = "digits_template.xml"
	 */
	public CreateXMLTemplate(String inputFile, String outputFile) {
		this.inputFile = inputFile;
		this.outputFile = outputFile;
		logger.info("CreateXMLTemplate(String, String) constructor");
	}
	
	/*
	 * Метод предназначен для чтения текстового файла inputFile 
	 * 
	 * Возвращает содержимое файла в текстовой форме
	 */
	private String getFileContent() {
		
		logger.info("CreateXMLTemplate.getFileContent() private method");
		c = 0;
		sb = new StringBuffer();
		
		try {
			
			r = new InputStreamReader(
					new FileInputStream(inputFile));
			
			while((c = r.read()) != -1) {
				str = sb.append((char) c).toString();
			}
			
			r.close();
			
		} catch (IOException e) {
			logger.error("CreateXMLTemplate.getFileContent() error : I/O exception has occurred", e);
		}	
		
		return str;		
	}
	
	/*
	 * Метод предназначен для записи шаблона в xml файл
	 * 
	 * Содержимое текстового файла inputFile записывается
	 * в xml файл outputFile
	 */
	public void setXMLTemplate() {
		
		logger.info("CreateXMLTemplate.setXMLTemplate() private method");
		xmlTemplate = new XMLTemplate();
		xmlTemplate.setTemplate(this.getFileContent());
		
		try {
			
			file = new File(outputFile);
			jaxbContext = JAXBContext.newInstance(XMLTemplate.class);
			jaxbMarshaller = jaxbContext.createMarshaller();

			jaxbMarshaller.marshal(xmlTemplate, file);

		} catch (JAXBException e) {
			logger.error("CreateXMLTemplate.setXMLTemplate() error : JAXB exception has occurred", e);
	    }
	}
	
}
